iT邦幫忙

2021 iThome 鐵人賽

DAY 19
0
Modern Web

30天每天寫網站系列 第 19

Day19-Flex屬性_超簡單製作導覽列

  • 分享至 

  • xImage
  •  

今天來介紹運用CSS的flex屬性,超簡單製作導覽列
預想是
電腦版左邊有LOGO,右邊有nav選單
手機板左邊是LOGO,右邊會出現漢堡選單的圖樣,點擊後拉開隱藏的nav選單

首先我們先在HTML中加入nav跟一點點內容

<nav>
    <div class="left">
        <div class="logo">LOGO</div>
        <div class="menu-item"  id="ham">
            <i class=" fas fa-bars"></i>
        </div>
    </div>
    <ul class="menu-btn">
        <li>
            <a href="">AA</a>
        </li>
        <li>
            <a href="">BB</a>
        </li>
        <li>
            <a href="">CC</a>
        </li>
    </ul>
</nav>
<div>
    <h1>內容</h1>
</div>

還未放入CSS時長這樣
https://ithelp.ithome.com.tw/upload/images/20211004/20141991JRrbLdmFvM.jpg
然後我們幫他加上CSS
把li跟連結的樣式拔掉,設置漢堡圖樣隱藏

nav {
    min-height: 40px;
    background-color: cadetblue;
    color: white;
    font-size: 24px;
    padding: 5px;
}

.menu-item {
    display: none;
}

li {
    list-style: none;
    padding: 0 10px;
    font-size: 16px;
}

a {
    text-decoration: none;
    color: white;
}

https://ithelp.ithome.com.tw/upload/images/20211004/20141991ohjlTrrpoE.jpg

然後運用CSS的寬度語法,設置當寬度小於320時漢堡圖樣顯示,menu-btn隱藏

@media only screen and (min-width: 0px) and (max-width: 320px) {
    .menu-item {
        display: block;
    }
    .menu-btn {
        display: none;
    }
}

https://ithelp.ithome.com.tw/upload/images/20211004/20141991xoQ0IUQR8z.jpg

然後我們要設置神奇的flex語法
設下去後便能輕鬆讓nav在電腦版呈現橫的排列,手機板呈現直的排列

nav {
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.left {
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.menu-btn {
    display: flex;
}

flex預設為橫向排列,設置flex的區塊內的東西會被整齊的橫向排列
我另外設置了
justify-content: space-between;
align-items: center;
是要讓裡面的東西照我期望的排版去排,實際作用可以自己google~

先設置好display: flex後,便能看到我們剛剛排直直的nav內容跟menu-btn變成橫向的了
https://ithelp.ithome.com.tw/upload/images/20211004/20141991VVSEpRMa0u.jpg

然後在寬度小於320的地方把nav跟menu-btn運用flex的相關語法設成直向排列

@media only screen and (min-width: 0px) and (max-width: 320px) {
    nav {
        flex-direction: column;
    }

    .menu-btn {
        flex-direction: column;
        width: 100%;
    }
}

https://ithelp.ithome.com.tw/upload/images/20211004/20141991hnGDeMKodJ.jpg
這邊先把menu-btn的display: none拔掉了讓大家看的到

然後我們來寫JS
這邊需要先多設一個css

.show {
    display: block;
}

然後運用jquery的addClass跟removeClass加到menu-btn讓他打開或關上就可以了

var ham = false;
$(function () {
    $("#ham").click(function () {
        if (!ham) {
            $(".menu-btn").addClass("show");
            ham = true
        } else {
            $(".menu-btn").removeClass("show");
            ham = false
        }
    });
})

先寫一個變數當旗幟判別打開或關上,預設是關上的,然後點擊漢堡圖樣時去判別旗幟狀態並給予相對應的改變就好

https://i.imgur.com/vI5nIfw.gif
就這樣超簡單導覽列便完成了
這個做法出現的手機板nav選單會把內容往下推,只要另外再去設置position: absolute 或位置之類的就可以做到其他變化囉!!

為什麼我這邊是使用addClass跟removeClass而不是直接去設置css呢
因為如果你用
$(".menu-btn").css("display","block")跟$(".menu-btn").css("display","none")
他會被加在HTML的style裡面,這樣子只要你有點擊過一次漢堡標誌,讓我們的menu-btn有著display:none的話
你再次切換回電腦版時,會發現你看不到他了
因為即使你在css有設置什麼display:block之類的,他會被HTML中更高級的css覆蓋掉,無法作用的~


上一篇
Day18-選取器應用_串接json檔
下一篇
Day20-自製下拉式選單_我就想要美美的
系列文
30天每天寫網站30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言